// var a =1;
// console.log(a++)
// console.log(++a)
// console.log(a)
// console.log(a+'1')
// console.log(typeof a)
// console.log(a)
// // a = a+'1'
// console.log(a)
// var b = a++ + ++a + a;
// console.log(b)



let p1 = new Promise((resolve,reject)=>{
    resolve("成功了")
})

let p2 = new Promise((resolve,reject)=>{
    resolve("success")
})
// let p3 = new Promise((resolve,reject)=>{
//     reject("失败了")
// })
let p3 =  Promise.reject("失败")

//Promise.all可以将多个Promise实例包装成一个新的Promise实例。
//同时，成功和失败的返回值是不同的，成功的时候返回的是一个结果数组，而失败的时候则返回最先被reject失败状态的值。
Promise.all([p1,p2]).then(res=>{
    console.log(res,'成功')
}).catch(err=>{
    console.log(err,'异常')
})
Promise.all([p1,p2,p3]).then(res=>{
    console.log(res,'成功2')
}).catch(err=>{
    console.log(err,'异常2')
})
//应用例子
let wake = (time)=>{
    return new Promise((resolve,reject)=>{
        setTimeout(()=>{
            resolve(`${time / 1000}秒后醒来`)
        },time)
    })
}
//需要特别注意的是，Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的，即p1的结果在前，即便p1的结果获取的比p2要晚。
//这带来了一个绝大的好处：在前端开发请求数据的过程中，偶尔会遇到发送多个请求并根据请求顺序获取和使用数据的场景，使用Promise.all毫无疑问可以解决这个问题

let t1 = wake(3000)
let t2 = wake(2000)
let t3 = wake(100)
Promise.all([t1,t2]).then(res=>{
    console.log(res)
}).catch(err=>{
    console.log(err)
})



//Promise.race的使用
//Promse.race就是赛跑的意思，意思就是说，Promise.race([p1, p2, p3])里面哪个结果获得的快，就返回那个结果，不管结果本身是成功状态还是失败状态。
Promise.race([t1,t3,t2]).then(res=>{
    console.log(res,'比赛')
}).catch(err=>{
    console.log(err)
})